home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / common / glue.c < prev    next >
C/C++ Source or Header  |  1996-07-24  |  8KB  |  337 lines

  1. /*
  2.  * static char *rcsid_glue_c =
  3.  *   "$Id: glue.c,v 1.17 1995/11/13 08:02:15 master Exp $";
  4.  */
  5.  
  6. /*
  7.     CrossFire, A Multiplayer game for X-windows
  8.  
  9.     Copyright (C) 1994 Mark Wedel
  10.     Copyright (C) 1992 Frank Tore Johansen
  11.  
  12.     This program is free software; you can redistribute it and/or modify
  13.     it under the terms of the GNU General Public License as published by
  14.     the Free Software Foundation; either version 2 of the License, or
  15.     (at your option) any later version.
  16.  
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.  
  22.     You should have received a copy of the GNU General Public License
  23.     along with this program; if not, write to the Free Software
  24.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  
  26.     The author can be reached via e-mail to master@rahul.net
  27. */
  28.  
  29. #include <global.h>
  30.  
  31. /*
  32.  * All this glue is currently needed to connect the game with the
  33.  * server.  I'll try to make the library more able to "stand on it's
  34.  * own legs" later; not done in 5 minutes to separate two parts of
  35.  * the code which were connected, well, can you say "spagetti"?
  36.  */
  37.  
  38. type_func_int    emergency_save_func;
  39. type_func_void    clean_tmp_files_func;
  40. type_func_map    fix_auto_apply_func;
  41. type_func_ob    remove_friendly_object_func;
  42. type_func_void    process_active_maps_func;
  43. type_func_map    update_buttons_func;
  44. type_func_int_int_ob_cchar    draw_info_func;
  45. type_func_ob    draw_stats_func;
  46. type_func_ob    draw_inventory_func;
  47. type_func_ob    draw_look_func;
  48. type_int_func_ob_ob    apply_func;
  49. type_func_ob    draw_func;
  50. type_func_ob_ob    monster_check_apply_func;
  51. type_func_ob    draw_inventory_faces_func;
  52. type_func_ob    draw_look_faces_func;
  53. type_func_void    init_blocksview_players_func;
  54. type_func_int_map_char    info_map_func;
  55. type_func_ob    move_teleporter_func;
  56. type_func_ob_int  trap_adjust_func;
  57. type_func_ob    move_creator_func;
  58. type_func_ob_ob esrv_send_item_func;
  59. type_func_int_int esrv_del_item_func;
  60.  
  61. static char *fatalmsgs[80]={
  62.   "Failed to allocate memory",
  63.   "Failed repeatedly to load maps",
  64.   "Hashtable for archetypes is too small",
  65.   "Too many errors"
  66. };
  67.  
  68. /*
  69.  * Initialise all function-pointers to dummy-functions which will
  70.  * do nothing and return nothing (of value at least).
  71.  * Very healthy to do this when using the library, since
  72.  * function pointers are being called throughout the library, without
  73.  * being checked first.
  74.  * init_library() calls this function.
  75.  */
  76.  
  77. void init_function_pointers() {
  78.   emergency_save_func = dummy_function_int;
  79.   clean_tmp_files_func = dummy_function;
  80.   fix_auto_apply_func = dummy_function_map;
  81.   remove_friendly_object_func = dummy_function_ob;
  82.   process_active_maps_func = dummy_function;
  83.   update_buttons_func = dummy_function_map;
  84.   draw_info_func = dummy_draw_info;
  85.   draw_stats_func = dummy_function_ob;
  86.   draw_inventory_faces_func = dummy_function_ob;
  87.   draw_look_faces_func = dummy_function_ob;
  88.   draw_inventory_func = dummy_function_ob;
  89.   draw_look_func = dummy_function_ob;
  90.   apply_func = dummy_function_ob2int;
  91.   draw_func = dummy_function_ob;
  92.   monster_check_apply_func = dummy_function_ob2;
  93.   init_blocksview_players_func = dummy_function;
  94.   info_map_func = dummy_function_mapstr;
  95.   move_teleporter_func = dummy_function_ob;
  96.   trap_adjust_func = dummy_function_ob_int;
  97.   move_creator_func = dummy_function_ob;
  98.   esrv_send_item_func = dummy_function_ob2;
  99.   esrv_del_item_func = dummy_function_int_int;
  100.  
  101. }
  102.  
  103. /*
  104.  * Specifies which function to call when there is an emergency save.
  105.  */
  106.  
  107. void set_emergency_save(type_func_int addr) {
  108.   emergency_save_func = addr;
  109. }
  110.  
  111. /*
  112.  * Specifies which function to call to clean temporary files.
  113.  */
  114.  
  115. void set_clean_tmp_files(type_func_void addr) {
  116.   clean_tmp_files_func = addr;
  117. }
  118.  
  119. /*
  120.  * Specifies which function to call to fix auto-apply (objects which
  121.  * applies themselves when their map is loaded).
  122.  */
  123.  
  124. void set_fix_auto_apply(type_func_map addr) {
  125.   fix_auto_apply_func = addr;
  126. }
  127.  
  128. /*
  129.  * Specifies which function to call to remove an object in the
  130.  * linked list of friendly objects.
  131.  */
  132.  
  133. void set_remove_friendly_object(type_func_ob addr) {
  134.   remove_friendly_object_func = addr;
  135. }
  136.  
  137. /*
  138.  * Specify which function to call to do some work in active
  139.  * maps.  That function might get called if there are several players,
  140.  * and one player is using too much cpu to either load a map, or to
  141.  * load pixmaps.
  142.  */
  143.  
  144. void set_process_active_maps(type_func_void addr) {
  145.   process_active_maps_func = addr;
  146. }
  147.  
  148. /*
  149.  * Specify which function to call to recoordinate all buttons.
  150.  */
  151.  
  152. void set_update_buttons(type_func_map addr) {
  153.   update_buttons_func = addr;
  154. }
  155.  
  156. /*
  157.  * Specify which function to call to draw text to the window
  158.  * of a player.
  159.  */
  160.  
  161. void set_draw_info(type_func_int_int_ob_cchar addr) {
  162.   draw_info_func = addr;
  163. }
  164.  
  165. /*
  166.  * Specify which function to call to update the text in the
  167.  * stat-window of a player.
  168.  */
  169.  
  170. void set_draw_stats(type_func_ob addr) {
  171.   draw_stats_func = addr;
  172. }
  173.  
  174. /*
  175.  * Specify which function to call to update the graphics in the
  176.  * inventory-window of a player.
  177.  */
  178.  
  179. void set_draw_inventory_faces(type_func_ob addr) {
  180.   draw_inventory_faces_func = addr;
  181. }
  182.  
  183. /*
  184.  * Specify which function to call to update the graphics
  185.  * in the look-window of a player.
  186.  */
  187.  
  188. void set_draw_look_faces(type_func_ob addr) {
  189.   draw_look_faces_func = addr;
  190. }
  191.  
  192. /*
  193.  * Specify which function to call to update the content
  194.  * in the inventory-window of a player.
  195.  */
  196.  
  197. void set_draw_inventory(type_func_ob addr) {
  198.   draw_inventory_func = addr;
  199. }
  200.  
  201. /*
  202.  * Specify which function to call to update the content
  203.  * of the look-window of a player.
  204.  */
  205.  
  206. void set_draw_look(type_func_ob addr) {
  207.   draw_look_func = addr;
  208. }
  209.  
  210. /*
  211.  * Specify which function to call to apply an object.
  212.  */
  213.  
  214. void set_apply(type_int_func_ob_ob addr) {
  215.   apply_func = addr;
  216. }
  217.  
  218. /*
  219.  * Specify which function to call to draw on the graphic-window
  220.  * of a player.
  221.  */
  222.  
  223. void set_draw(type_func_ob addr) {
  224.   draw_func = addr;
  225. }
  226.  
  227. /*
  228.  * Specify which function to call to check if a monster can
  229.  * apply an object.
  230.  */
  231.  
  232. void set_monster_check_apply(type_func_ob_ob addr) {
  233.   monster_check_apply_func = addr;
  234. }
  235.  
  236. /*
  237.  * Specify which functino to call to initialise the blocksview[] array.
  238.  */
  239.  
  240. void set_init_blocksview_players(type_func_void addr) {
  241.   init_blocksview_players_func = addr;
  242. }
  243.  
  244. void set_info_map(type_func_int_map_char addr) {
  245.   info_map_func = addr;
  246. }
  247.  
  248. void set_move_teleporter(type_func_ob addr) {
  249.   move_teleporter_func = addr;
  250. }
  251.  
  252. void set_trap_adjust(type_func_ob_int addr) {
  253.   trap_adjust_func = addr;
  254. }
  255.  
  256. void set_move_creator(type_func_ob addr) {
  257.   move_creator_func = addr;
  258. }
  259.  
  260. void set_esrv_send_item (type_func_ob_ob addr) {
  261.   esrv_send_item_func = addr;
  262. }
  263.  
  264. void set_esrv_del_item(type_func_int_int addr) {
  265.   esrv_del_item_func = addr;
  266. }
  267.  
  268. /*
  269.  * fatal() is meant to be called whenever a fatal signal is intercepted.
  270.  * It will call the emergency_save and the clean_tmp_files functions.
  271.  */
  272.  
  273. void fatal(int err) {
  274.   fprintf(logfile,"Fatal: %s\n",fatalmsgs[err]);
  275.   (*emergency_save_func)(0);
  276.   (*clean_tmp_files_func)();
  277. #ifdef GOD
  278.   pray();
  279. #else
  280.   fprintf(logfile,"Exiting...\n");
  281.   exit(err);
  282. #endif
  283. }
  284.  
  285. #ifndef __Making_docs__ /* Don't want documentation on these */
  286.  
  287. /*
  288.  * These are only dummy functions, to avoid having any function-pointers
  289.  * having the possibility of pointing to NULL (or random location),
  290.  * thus I don't have to check the contents of a function-pointer each
  291.  * time I want to jump to it.
  292.  */
  293.  
  294. void dummy_function_int(int i) {
  295. }
  296.  
  297. void dummy_function_int_int(int i, int j) {
  298. }
  299.  
  300.  
  301. void dummy_function() {
  302. }
  303.  
  304. void dummy_function_map(mapstruct *m) {
  305. }
  306.  
  307. void dummy_function_ob(object *ob) {
  308. }
  309.  
  310. void dummy_function_ob2(object *ob, object *ob2) {
  311. }
  312.  
  313. int dummy_function_ob2int(object *ob, object *ob2) {
  314.   return 0;
  315. }
  316.  
  317. void dummy_function_ob_int(object *ob, int i) {
  318. }
  319.  
  320. void dummy_function_txtnr(char *txt, int nr) {
  321.   fprintf(logfile,"%d: %s\n",nr,txt);
  322. }
  323.  
  324. void dummy_draw_info(int a, int b, object *ob, const char *txt) {
  325.   fprintf(logfile, "%s\n", txt);
  326. }
  327.  
  328. void dummy_function_mapstr(int a, mapstruct *map, char *str) {
  329.   fprintf(logfile, "info_map: %s\n", str);
  330. }
  331.  
  332. void dummy_function_int_ob_ob (int n, object *ob, object *ob2) {
  333. }
  334.  
  335. #endif
  336.  
  337.